//用于测试
#include <iostream>
#include <string>
#include <ctemplate/template.h>

int main()
{
    std::string in_html = "./test.html";
    std::string value = "负载均衡";

    // 形成数据字典
    ctemplate::TemplateDictionary root("test"); // 类似于unordered_map<> test
    root.SetValue("key", value);   // 类似于test.insert({})

    // 获取被渲染网页对象
    // 第一个参数表示获取的网页内容，第二个参数表示保持网页原貌(不去除空行空格)
    ctemplate::Template *tpl = ctemplate::Template::GetTemplate(in_html, ctemplate::DO_NOT_STRIP);

    //添加字典数据到网页中
    std::string out_html;  // 形成的新网页
    tpl->Expand(&out_html, &root); 

    // 完成渲染
    std::cout << out_html << std::endl;
}


















// #include <iostream>
// #include <sys/time.h>
// #include <sys/resource.h>
// #include <unistd.h>
// #include <signal.h>
// #include <vector>
// #include <string>
// #include <jsoncpp/json/json.h>

// #include <boost/algorithm/string.hpp>


// int main()
// {
//     std::vector<std::string> tokens;
//     const std::string str = "1 回文数 简单 1 30000";
//     const std::string sep = " ";
//     boost::split(tokens, str, boost::is_any_of(sep), boost::algorithm::token_compress_on);

//     for(auto& iter : tokens)
//     {
//         std::cout << iter << std::endl;
//     }


//     // 序列化的工作
//     // 将结构化数据转化成为一个字符串
//     // Value是一个Json的中间类，可以填充KV值
//     // Json::Value root;
//     // root["code"] = "mycode";
//     // root["user"] = "fcy";
//     // root["age"] = "21";
//     // Json::StyledWriter writer;
//     // // Json::FastWriter writer;
//     // std::string str = writer.write(root);
//     // std::cout << str << std::endl;
//     return 0;
// }







// void handler(int signo)
// {
//     std::cout << "signo : " << signo << std::endl;
//     exit(1);
// }
// int main()
// {
    //资源不足，导致OS终止进程，是通过信号终止的
    // for(int i =1; i <= 31; i++){
    //     signal(i, handler);
    // }
    // 限制累计运行时长

    // struct rlimit r;
    // r.rlim_cur = 1;
    // r.rlim_max = RLIM_INFINITY;
    // setrlimit(RLIMIT_CPU, &r);
    // while(1);
//     struct rlimit r;
//     r.rlim_cur = 1024 * 1024 * 40; //20M
//     r.rlim_max = RLIM_INFINITY;
//     setrlimit(RLIMIT_AS, &r);
//     int count = 0;
//     while(true)
//     {
//         int *p = new int[1024*1024];
//         count++;
//         std::cout << "size: " << count << std::endl;
//         sleep(1);
//     }
//     return 0;
// }
// //内存申请失败
// terminate called after throwing an instance of 'std::bad_alloc'
//   what():  std::bad_alloc
// signo : 6
// [whb@bite-alicloud OnlineJudge]$ kill -l
//  1) SIGHUP       2) SIGINT       3) SIGQUIT      4) SIGILL       5) SIGTRAP
//  6) SIGABRT      7) SIGBUS       8) SIGFPE       9) SIGKILL     10) SIGUSR1
// 11) SIGSEGV     12) SIGUSR2     13) SIGPIPE     14) SIGALRM     15) SIGTERM
// 16) SIGSTKFLT   17) SIGCHLD     18) SIGCONT     19) SIGSTOP     20) SIGTSTP
// ...
//     
//     
// //CPU使用超时
// [whb@bite-alicloud OnlineJudge]$ ./a.out 
// signo : 24
// [whb@bite-alicloud OnlineJudge]$ kill -l
//  1) SIGHUP       2) SIGINT       3) SIGQUIT      4) SIGILL       5) SIGTRAP
//  6) SIGABRT      7) SIGBUS       8) SIGFPE       9) SIGKILL     10) SIGUSR1
// 11) SIGSEGV     12) SIGUSR2     13) SIGPIPE     14) SIGALRM     15) SIGTERM
// 16) SIGSTKFLT   17) SIGCHLD     18) SIGCONT     19) SIGSTOP     20) SIGTSTP
// 21) SIGTTIN     22) SIGTTOU     23) SIGURG      24) SIGXCPU     25) SIGXFSZ
// 26) SIGVTALRM   27) SIGPROF     28) SIGWINCH    29) SIGIO       30) SIGPWR
// ....
